﻿using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Xml;

namespace ibba.src.norisk
{
    public class XMLServidor
    {
        public string HostName { get; set; }
        public bool IdServidorDefault { get; set; }
        public bool HostParcial { get; set; }
        public string ServidorComponentes { get; set; }
        public string ServidorComponentesFixo { get; set; }
        public string DiretorioVirtual { get; set; }
    }

    public class AmbienteHelper
    {

        private static readonly AmbienteHelper _instancia = new AmbienteHelper();
        private string idServidorPadrao;
        private string servidorName;
        private List<XMLServidor> listServidor;
        private XMLServidor servidor;

        private AmbienteHelper()
        {
            CarregarArquivoConfiguracoes();
        }

        public static AmbienteHelper Instance
        {
            get
            {
                return _instancia;
            }
        }

        public string ServidorComponentes { get; private set; }
        public string ServidorComponentesFixo { get; private set; }
        public string DiretorioVirtual { get; private set; }

        private void CarregarArquivoConfiguracoes()
        {
            try
            {
                listServidor = new List<XMLServidor>();

                //using (XmlReader xr = XmlReader.Create(new Uri(Application.Current.Host.Source, "Servidores.xml").AbsolutePath))
                using (XmlReader xr = XmlReader.Create(new StringReader(App.XMLServidores)))
                {
                    xr.MoveToElement();

                    while (xr.Read())
                    {
                        if (xr.NodeType == XmlNodeType.Element && xr.Name == "servidores")
                        {
                            idServidorPadrao = xr.GetAttribute("id_default").ToLower().Trim();
                        }
                        else if (xr.NodeType == XmlNodeType.Element && xr.Name == "servidor")
                        {
                            servidorName = xr.GetAttribute("id").ToLower().Trim();

                            listServidor.Add(new XMLServidor
                            {
                                HostName = servidorName.Replace("*", ""),
                                HostParcial = servidorName.Contains("*"),
                                IdServidorDefault = servidorName.Equals(idServidorPadrao),
                                DiretorioVirtual = xr.GetAttribute("diretoriovirtual"),
                                ServidorComponentes = xr.GetAttribute("servidorcomponentes"),
                                ServidorComponentesFixo = xr.GetAttribute("servidorcomponentesfixo")
                            });
                        }
                    }
                }

                servidor = null;
                if (listServidor != null && listServidor.Count > 0)
                {
                    servidorName = AppHelper.Servidor.Trim().ToLower();

                    servidor = (from s in listServidor
                                where s.HostParcial.Equals(false) && s.HostName.Equals(servidorName)
                                select s).FirstOrDefault();

                    if (servidor == null)
                        servidor = (from s in listServidor
                                    where s.HostParcial.Equals(true)
                                          && string.Concat("//", servidorName).Contains(string.Concat("//", s.HostName))
                                    orderby s.HostName descending
                                    select s).FirstOrDefault();

                    if (servidor == null)
                        servidor = (from s in listServidor
                                    where s.IdServidorDefault.Equals(true)
                                    select s).FirstOrDefault();

                }

                if (servidor != null)
                {
                    this.DiretorioVirtual = servidor.DiretorioVirtual;
                    this.ServidorComponentes = servidor.ServidorComponentes;
                    this.ServidorComponentesFixo = servidor.ServidorComponentesFixo;
                }

            }
            catch (System.Exception e)
            {
                //Erro pe = new Erro(string.Format("{0} \n {1} ", "CarregarArquivoConfiguracoes", e.ToString()));
                //pe.Show();
                MessageBoxHelper.ShowErro(AppHelper.NomeSistema, "Erro ao carregar configuração de servidores", e.Message.ToString());
            }
        }

    }
}

/*
using System.IO;
using System.Xml;
using System.ServiceModel;


namespace ibba.src.norisk
{
    public class AmbienteHelper
    {
        public const string EndpointServiceAcesso = "endpoint_ServiceAcesso";
        public const string EndpointServiceProdutoModalidade = "endpoint_ServiceProdutoModalidade";
        public const string EndpointServiceClasseProduto = "endpoint_ServiceClasseProduto";
        public const string EndpointServiceContratoOperacao = "endpoint_ServiceContratoOperacao";
        public const string EndpointServiceParametroContrato = "endpoint_ServiceParametroContrato";
        public const string EndpointServiceTipoParametro = "endpoint_ServiceTipoParametro";
        public const string EndpointServiceComboMotivo = "endpoint_ServiceComboMotivo";
        public const string EndpointServiceContratoVigencia = "endpoint_ServiceContratoVigencia";
        public const string EndpointServiceGarantiaContrato = "endpoint_ServiceGarantiaContrato";
        public const string EndpointServiceBem = "endpoint_ServiceBem";
        public const string EndpointServiceNatureza = "endpoint_ServiceNatureza";
        public const string EndpointServiceInstrumento = "endpoint_ServiceInstrumento";
        public const string EndpointServiceTetoMitigacao = "endpoint_ServiceTetoMitigacao";
        private static readonly AmbienteHelper _instancia = new AmbienteHelper();

        private AmbienteHelper()
        {
            CarregarArquivoConfiguracoes();
        }

        public static AmbienteHelper Instance
        {
            get
            {
                return _instancia;
            }
        }

        public string ServidorComponentes { get; private set; }
        public string ServidorComponentesFixo { get; private set; }
        public string DiretorioVirtual { get; private set; }

        private void CarregarArquivoConfiguracoes()
        {
            try
            {
                using (XmlReader xr = XmlReader.Create(new StringReader(App.XMLServidores)))
                {
                    xr.MoveToContent();

                    while (xr.Read())
                    {
                        if (xr.NodeType == XmlNodeType.Element && xr.Name == "servidor")
                        {

                            if (AppHelper.Servidor.Trim().ToLower().IndexOf(xr.GetAttribute("id").ToLower()) == 0)
                            {
                                this.ServidorComponentes = xr.GetAttribute("servidorcomponentes");
                                this.ServidorComponentesFixo = xr.GetAttribute("servidorcomponentesfixo");
                                this.DiretorioVirtual = xr.GetAttribute("diretoriovirtual");
                                break;
                            }
                            else if (xr.GetAttribute("id") == "producao")
                            {
                                this.ServidorComponentes = xr.GetAttribute("servidorcomponentes");
                                this.ServidorComponentesFixo = xr.GetAttribute("servidorcomponentesfixo");
                                this.DiretorioVirtual = xr.GetAttribute("diretoriovirtual");
                            }
                        }
                    }
                }

            }
            catch (System.Exception e)
            {
                MessageBoxHelper.ShowErro(AppHelper.NomeSistema, "Erro ao carregar configuração de servidores", e.Message.ToString());
            }
        }

        public EndpointAddress GetEndpointAddress(string pServiceName)
        {
            return new EndpointAddress(string.Format("http://{0}/{1}/{2}.svc", this.ServidorComponentes, this.DiretorioVirtual, pServiceName));
        }
    }
}
*/